package com.esp.studentManagementSystem.utils;

import com.esp.studentManagementSystem.pojo.po.entity.SysMenu;
import com.esp.studentManagementSystem.pojo.vo.ChildrenMenusVO;
import com.esp.studentManagementSystem.pojo.vo.MenuVO;

import java.util.ArrayList;
import java.util.List;

public class MenuConverterUtils {
    /**
     * 将系统菜单列表转换为业务对象菜单列表
     * @param sysMenus 系统菜单列表，包含所有菜单项
     * @return 转换后的业务对象菜单列表，仅包含顶层菜单及其子菜单
     */
    public static List<MenuVO> convertToList(List<SysMenu> sysMenus) {
        List<MenuVO> menuVOS = new ArrayList<>();
        for (SysMenu sysMenu : sysMenus) {
            if (sysMenu.getPid() == 0) { // 判断是否为顶层菜单
                // 创建一个新的业务对象菜单，并从系统菜单中填充数据
                MenuVO menuVO = new MenuVO();
                menuVO.setId(sysMenu.getId());
                menuVO.setName(sysMenu.getName());
                menuVO.setCode(sysMenu.getCode());
                menuVO.setType(sysMenu.getType());
                // 为当前菜单项添加子菜单项
                menuVO.setChildren(convertChildMenus(sysMenus, sysMenu.getId()));
                menuVOS.add(menuVO);
            }
        }
        return menuVOS;
    }

    /**
     * 将系统菜单列表转换为子菜单业务对象列表。
     * @param sysMenus 系统菜单列表，包含所有菜单项。
     * @param parentId 要查找的子菜单的父菜单ID。
     * @return 子菜单业务对象列表，这些子菜单都属于指定的父菜单ID。
     */
    private static List<ChildrenMenusVO> convertChildMenus(List<SysMenu> sysMenus, Integer parentId) {
        List<ChildrenMenusVO> childMenus = new ArrayList<>();
        // 遍历所有菜单，查找父菜单ID匹配的子菜单
        for (SysMenu sysMenu : sysMenus) {
            if (parentId.equals(sysMenu.getPid())) {
                ChildrenMenusVO childMenuBO = new ChildrenMenusVO();
                // 将系统菜单项的信息映射到业务对象上
                childMenuBO.setId(sysMenu.getId());
                childMenuBO.setName(sysMenu.getName());
                childMenuBO.setCode(sysMenu.getCode());
                childMenuBO.setType(sysMenu.getType());
                childMenus.add(childMenuBO);
            }
        }
        return childMenus;
    }
}
